package co.com.bean.estudiantegrupo;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;

import co.com.smart.maestro.infraestructure.dto.EstudgrupoDTO;
import co.com.smart.maestro.infraestructure.dto.ResponseJson;
import co.com.smart.mapper.Mapper;
import co.com.smart.persistence.entity.EstudianteGrupoFacadeLocal;
import co.com.smart.persistence.entity.dto.SmartEstudianteGrupo;
import co.com.smart.session.DelegateContextEJB;
import co.com.smart.utilidades.Constantes;

/**
 * Session Bean implementation class EstudianteGrupoBean
 */
@Stateless(mappedName = "ejb/EstudianteGrupoBean")
public class EstudianteGrupoBean implements EstudianteGrupoBeanLocal{
		private EstudianteGrupoFacadeLocal facade;
		
		@Resource
		private SessionContext session;
		
		public EstudianteGrupoBean(){
			facade = DelegateContextEJB.getEstudianteGrupoFacadeLocal();
		}
		
		@Override
		public ResponseJson insertarEstudianteGrupo(EstudgrupoDTO estudianteGrupoDTO) {
			ResponseJson response = new ResponseJson(); 
			try {
				estudianteGrupoDTO.setCousuario(session.getCallerPrincipal().getName());				
				estudianteGrupoDTO.setFhingreso(new Date());
				facade.create(Mapper.mapperSmartEstudianteGrupoToDto(estudianteGrupoDTO));
				response.setCodigo(Constantes.StatusResponse.OK.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "EstudianteGrupo almacenado.");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "EstudianteGrupo almacenado.");
			} catch (Throwable e) {
				response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible almacenar el EstudianteGrupo.");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
			}
			return response ;
		}
		
		@Override
		public List<EstudgrupoDTO> consultarAllEstudianteGrupo(){
			List<EstudgrupoDTO> estudianteGrupo = new ArrayList<EstudgrupoDTO>();
			for (SmartEstudianteGrupo entity : facade.findAll()) {
				if(entity.getSmFhretiro() == null){
					estudianteGrupo.add(Mapper.mapperDtoToSmartEstudgrupo(entity));
				}
			}

			return estudianteGrupo;
		}

		@Override
		public EstudgrupoDTO consultarEstudianteGrupoId(EstudgrupoDTO estudianteGrupoDTO) {
			EstudgrupoDTO estudianteGrupo = new EstudgrupoDTO();	
			SmartEstudianteGrupo entity  = facade.find(estudianteGrupoDTO.getScestudgrupo());
			if(entity != null && entity.getSmFhretiro() == null){
				estudianteGrupo = Mapper.mapperDtoToSmartEstudgrupo(entity);
			}
			return estudianteGrupo;
		}

		@Override
		public ResponseJson editEstudianteGrupo(EstudgrupoDTO estudianteGrupoDTO) {
			ResponseJson response = new ResponseJson(); 
			try {
				estudianteGrupoDTO.setFhmodificacion(new Date());
				facade.edit(Mapper.mapperSmartEstudianteGrupoToDto(estudianteGrupoDTO));
				response.setCodigo(Constantes.StatusResponse.OK.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "EstudianteGrupo editado.");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "EstudianteGrupo editado.");
			} catch (Throwable e) {
				response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible editar el EstudianteGrupo.");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
			}
			return response ;
		}

		@Override
		public ResponseJson removeEstudianteGrupo(EstudgrupoDTO estudianteGrupoDTO,  boolean logic) {
			ResponseJson response = new ResponseJson(); 
			if(logic){
				try {
					estudianteGrupoDTO.setFhretiro(new Date());
					estudianteGrupoDTO.setFhmodificacion(new Date());

					facade.edit(Mapper.mapperSmartEstudianteGrupoToDto(estudianteGrupoDTO));
					response.setCodigo(Constantes.StatusResponse.OK.getStatus());
					response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "EstudianteGrupo inactivado");
					response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "EstudianteGrupo inactivado.");
				} catch (Throwable e) {
					response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
					response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible inactivar el EstudianteGrupo.");
					response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
				}
			}else{
				try {
					facade.remove(Mapper.mapperSmartEstudianteGrupoToDto(estudianteGrupoDTO));
					response.setCodigo(Constantes.StatusResponse.OK.getStatus());
					response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "EstudianteGrupo eliminado");
					response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "EstudianteGrupo eliminado.");
				} catch (Throwable e) {
					response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
					response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible eliminar el EstudianteGrupo.");
					response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
				}
			}
			return response ;
		}
}
